﻿// Copyright 2008 Newgrove Consultants Limited
// By John Diss 
//
using System;
using System.Data.SqlTypes;
using GeoAPI.Coordinates;
using GeoAPI.CoordinateSystems;
using GeoAPI.CoordinateSystems.Transformations;
using GeoAPI.Geometries;
using NPack.Interfaces;

public interface IServices<TCoordinate> : IServices
    where TCoordinate : ICoordinate<TCoordinate>, IEquatable<TCoordinate>, IComparable<TCoordinate>,
        IComputable<double, TCoordinate>, IConvertible
{
    new ICoordinateFactory<TCoordinate> CoordinateFactory { get; }
    new ICoordinateTransformationFactory<TCoordinate> CoordinateTransformationFactory { get; }
    new IGeometryFactory<TCoordinate> GeometryFactory { get; }
    new IGeometryFactory<TCoordinate> this[int? srid] { get; }
    new IGeometryFactory<TCoordinate> this[string srid] { get; }
    new IGeometryFactory<TCoordinate> this[SqlInt32 srid] { get; }
    new ICoordinateSystemFactory<TCoordinate> CoordinateSystemFactory { get; }
    new IGeometryFactory<TCoordinate> SridAwareGeometryFactory(int? srid);
}